package com.wn.date20190814;

import java.io.ObjectInputStream.GetField;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.zip.Inflater;

/**
 * 1.地铁站编号和站名对应关系如下： 1=天府广场 2=省体育馆 3=倪家桥 4=火车南站 5=孵化园 6=世纪城 7=天府三街 8=天府五街 //....
 * 将以上对应关系的数据存储到map集合中，key：表示站编号，value：表示站名，并遍历打印(可以不按顺序打印)： 2.计算地铁票价规则： 总行程
 * 3站内（包含3站）收费3元， 3站以上但不超过5站（包含5站）的收费4元， 5站以上的，在4元的基础上，每多1站增加2元， 10元封顶；
 * 3.打印格式（需要对键盘录入的上车站和到达站进行判断，如果没有该站，提示重新输入，直到站名存在为止）： 注意：每站需要2分钟 请输入上车站：
 * 您输入的上车站：科技馆 不存在，请重新输入上车站： 天府广场 请输入到达站： 您输入的到达站：科技馆 不存在，请重新输入到达站： 孵化园
 * 从天府广场到孵化园共经过4站收费4元，大约需要 8分钟
 * 
 * @author song
 *
 */
public class Metro
{
	static Map<Integer, String> metroLine = new HashMap<Integer, String>();

	public static void main(String[] args)
	{
		Scanner scanner=new Scanner(System.in);
		String from,to;
		metroLine.put(1,"天府广场");
		metroLine.put(2, "省体育馆");
		metroLine.put(3,"倪家桥");
		metroLine.put(4,"桐梓林");
		metroLine.put(5,"火车南站");
		metroLine.put(6,"高新");
		metroLine.put(7,"金融城");
		metroLine.put(8,"孵化园");
		
		/*
		 * 输入
		 */
		while (true)
		{
			System.out.println("请输入上车地点：");
			from=scanner.next();
			if(getKey(from)!=-1)
				break;
			System.out.println(from +"不存在，请重新输入");
		}
		// 下车
		while (true)
		{
			System.out.println("请输入下车地点：");
			to=scanner.next();
			if(getKey(to)!=-1)
				break;
			System.out.println(to +"不存在，请重新输入");
		}
		
		System.out.println("从 "+from+"站 到 "+to+"站 共经过 "+getStations(from, to)+"站收费"
		+getPrice(from, to)+"元，大约需要"+getTime(from, to)+"分钟"
		);
		
	}

	/**
	 * 获取站台差
	 * 
	 * @param from
	 * @param to
	 * @return
	 */
	public static int getStations(String from, String to)
	{
		return Math.abs(getKey(to) - getKey(from));
	}

	/**
	 * 获取时间
	 * 
	 * @param from
	 * @param to
	 * @return
	 */
	public static int getTime(String from, String to)
	{
		return getStations(from, to) * 2;
	}

	/**
	 * 计算票价
	 * 
	 * @param from
	 * @param to
	 * @return
	 */
	public static int getPrice(String from, String to)
	{
		int stations = getStations(from, to);
		if (stations < 4)
		{
			return 3;
		} else if (stations < 6)
		{
			return 4;
		} else
		{
			return (4 + (stations - 5) * 2) > 10 ? 10 : (4 + (stations - 5) * 2);
		}
	}

	/**
	 * 根据站名，获取key,不存在返回-1
	 * 
	 * @param from
	 * @return
	 */
	public static int getKey(String place)
	{
		if (place != null)
		{
			for (int i : metroLine.keySet())
			{
				if (metroLine.get(i).equals(place))
				{
					return i;
				}
			}
		}
		return -1;
	}

}
